package vendas;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;

/**
 * Essa classe representa uma venda, e superclasse de VendaVista e VendaPrazo. 
 * 
 */
public class Venda {

	
	/*
	 * Os atributos devem ser protected para possibilirar o acesso direto a eles
	 * pelas subclasses
	 */
	protected int codigo; //gerado automaticamente pelo banco
	protected java.sql.Date data;
	protected double valor; //valor original da compra
	protected double valor_final; //valor apos o calculo de desconto ou juros
	protected ArrayList<ItemVenda> itens;


	/**
	 * Esse construtor inicia os atributos valor e valor_final com 0, data com a data em que
	 * o objeto for instanciado
	 */
	public Venda(){

		/*
		 * Grava a data em que o objeto for instanciado
		 */
		data = new java.sql.Date(Calendar.getInstance().getTimeInMillis());
		this.valor = 0;
		this.valor_final = 0;
		itens = new ArrayList<>();

	}

	/**
	 * Acrescenta um item a venda
	 * 
	 * @param item
	 */
	public void adicionarItem(ItemVenda item){

		if(item == null){

			throw new RuntimeException("item nulo");

		}

		/*
		 * A cada adicao de um item, os valores da venda devem ser atualizados
		 */
		valor += item.getValor();
		valor_final += item.getValor(); 
		itens.add(item);

	}

	/**
	 * Excluir um item da venda
	 */
	public void excluirItem(ItemVenda item){

		if(item == null){

			throw new RuntimeException("item nulo");

		}

		/*
		 * A cada exclusao de um item, os valores da venda devem ser atualizados
		 */
		valor -= item.getValor();
		valor_final -= item.getValor();
		itens.remove(item);

	}


	/**
	 * Imprime a nota fiscal da venda
	 */
	public void imprimirNota(){

	}

	public String toString(){

		String result = "";

		SimpleDateFormat formatador = new SimpleDateFormat("dd/MM/yyyy");

		result += "Codigo da venda: " + codigo +
				"\nData: " + formatador.format(data) + 
				"\nValor: " + valor +
				"\nValor Final: " + valor_final+
				"\n\nItens: \n\n";

		for(ItemVenda I : itens){

			result += I.toString();

		}

		return result;

	}//toString()

}//Venda
